JasmineJS এর Spies কি এবং কেন প্রয়োজন?

Spies ব্যবহার করে ফাংশন টেস্ট করা - জ্যাসমিনজেএস (JasmineJS) - Web Development

353

JasmineJS এ Spies এমন একটি টুল যা আপনাকে ফাংশনের আচরণ ট্র্যাক করতে এবং এটি কিভাবে কার্যকর হচ্ছে তা পরীক্ষা করতে সহায়তা করে। এটি বিশেষভাবে ব্যবহৃত হয় যখন আপনি একটি ফাংশন বা মেথডের আউটপুট বা আচরণ নিরীক্ষণ করতে চান, কিন্তু সেই ফাংশন বা মেথডটি সরাসরি পরীক্ষা করতে চান না। Spies একরকম "নকল" ফাংশন হিসেবে কাজ করে, যা আপনার কোডের মধ্যে কার্যকরী ফাংশনের পরিবর্তে রাখা হয় এবং তার কার্যকলাপ পরীক্ষা করা যায়।


Spies এর বৈশিষ্ট্য

  • ফাংশন ট্র্যাকিং: Spies ব্যবহার করে আপনি যে কোনো ফাংশন বা মেথডের কল ট্র্যাক করতে পারেন, যেমন এটি কখন এবং কতবার কল করা হয়েছে, এর আর্গুমেন্ট কী ছিল, এবং এটি কী রিটার্ন করেছে।
  • অ্যাসারশন (Assertion) তৈরি করা: Spies এর মাধ্যমে আপনি যাচাই করতে পারেন যে, একটি ফাংশন প্রত্যাশিতভাবে একাধিক বার কল হয়েছে কিনা, এবং এটি সঠিক আর্গুমেন্টের সাথে কল করা হয়েছে কিনা।
  • নকল ফাংশন তৈরি: Jasmine এর spyOn() ফাংশনটি ব্যবহার করে আপনি একটি মেথডের আচরণ নকল (mock) করে ফেলতে পারেন এবং এই আচরণ পরবর্তী টেস্টে পরীক্ষা করতে পারেন।

Spies এর ব্যবহার

JasmineJS এ Spies তৈরি করতে spyOn() ফাংশন ব্যবহার করা হয়। এর মাধ্যমে আপনি কোনো অবজেক্টের মেথড স্পাই করতে পারেন এবং সেই মেথডের কল ট্র্যাক করতে পারেন।

spyOn() এর সাধারণ কাঠামো:

spyOn(object, 'methodName');
  • object: এটি সেই অবজেক্ট যার মেথড আপনি স্পাই করতে চান।
  • methodName: এটি ঐ মেথডের নাম যার ওপর স্পাই করা হবে।

উদাহরণ:

describe("Spies Example", function() {
  it("should spy on the method and track its calls", function() {
    const user = {
      getName: function() {
        return "John Doe";
      }
    };

    // getName মেথডের ওপর spy তৈরি
    spyOn(user, 'getName');

    user.getName();  // getName মেথড কল

    // নিশ্চিত করছি যে getName মেথডটি একবার কল হয়েছে
    expect(user.getName).toHaveBeenCalled();
  });
});

এখানে, spyOn() দ্বারা getName() মেথডের ওপর স্পাই করা হয়েছে এবং তারপরে এটি কল করা হয়েছে। তারপর toHaveBeenCalled() matcher দিয়ে নিশ্চিত করা হয়েছে যে, getName() মেথডটি একবার কল হয়েছে।


কেন Spies প্রয়োজন?

Spies প্রয়োজন কারণ তারা কোডের আচরণ পরীক্ষা করতে সাহায্য করে, বিশেষত যখন আপনি মক (mock) বা স্টাব (stub) ব্যবহার করতে চান। কিছু কারণ নিম্নলিখিত:

  1. নির্ভরশীলতা কমানো: যখন আপনার কোড একাধিক উপাদান বা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করে, তখন আপনি এই উপাদানগুলির মধ্যে নির্ভরশীলতা কমাতে চান। স্পাই ব্যবহার করে আপনি আসল মেথড বা ফাংশনটি না কল করে শুধুমাত্র সেই আচরণ পরীক্ষা করতে পারেন।
  2. অ্যাসারশন তৈরি করা: স্পাইয়ের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে কোনো মেথড সঠিক আর্গুমেন্ট দিয়ে কল হয়েছে এবং প্রত্যাশিত ফলাফল ফিরিয়ে দিয়েছে। এর মাধ্যমে আপনি কোডের সঠিক কার্যকারিতা যাচাই করতে পারেন।
  3. অ্যাজাইল বা ইউনিট টেস্টিং: জটিল সিস্টেমে বিভিন্ন মডিউল একে অপরের সাথে ইন্টারঅ্যাক্ট করে। স্পাই ব্যবহার করে আপনি পৃথক মডিউল বা ফাংশনগুলোর আচরণ পরীক্ষার মাধ্যমে নিশ্চিত হতে পারেন যে তারা সঠিকভাবে কাজ করছে।
  4. মক ফাংশন তৈরি: স্পাই ব্যবহার করে আপনি মক ফাংশন তৈরি করতে পারেন, যা মূল কোডের আচরণকে পরিবর্তন না করে শুধুমাত্র পরীক্ষা করার জন্য কাজ করে। উদাহরণস্বরূপ, আপনি কোনো API কলের আচরণ স্পাই করতে পারেন এবং নিশ্চিত করতে পারেন যে এটি সঠিকভাবে কল হয়েছে।

Spies এর কিছু গুরুত্বপূর্ণ Matcher

  • toHaveBeenCalled(): নিশ্চিত করে যে ফাংশনটি কল হয়েছে।
  • toHaveBeenCalledTimes(n): নিশ্চিত করে যে ফাংশনটি নির্দিষ্ট সংখ্যক বার কল হয়েছে।
  • toHaveBeenCalledWith(arg1, arg2, ...): নিশ্চিত করে যে ফাংশনটি নির্দিষ্ট আর্গুমেন্ট দিয়ে কল হয়েছে।
  • toHaveReturnedWith(value): নিশ্চিত করে যে স্পাই করা ফাংশনটি একটি নির্দিষ্ট মান ফিরিয়েছে।

উদাহরণ:

describe("Spies Example", function() {
  it("should track the calls and arguments", function() {
    const user = {
      getName: function(firstName, lastName) {
        return firstName + " " + lastName;
      }
    };

    spyOn(user, 'getName').and.callThrough();  // মেথডটি স্পাই এবং আসল ফাংশন কল

    user.getName('John', 'Doe');  // getName কল

    // নিশ্চিত করছি যে getName মেথডটি সঠিক আর্গুমেন্টের সাথে কল হয়েছে
    expect(user.getName).toHaveBeenCalledWith('John', 'Doe');
    // নিশ্চিত করছি যে getName মেথডটি একবার কল হয়েছে
    expect(user.getName).toHaveBeenCalledTimes(1);
  });
});

এখানে:

  • callThrough(): এটি মূল মেথডের আচরণ চালু রাখে, যাতে এটি আসলভাবে কাজ করে।
  • toHaveBeenCalledWith(): নিশ্চিত করছে যে, getName() মেথডটি সঠিক আর্গুমেন্টের সাথে কল হয়েছে।
  • toHaveBeenCalledTimes(): নিশ্চিত করছে যে, মেথডটি একবার কল হয়েছে।

সারাংশ

JasmineJS এর Spies হল এমন একটি টুল যা ফাংশনের আচরণ এবং কলগুলি ট্র্যাক করতে ব্যবহৃত হয়। Spies ব্যবহার করে আপনি নিশ্চিত হতে পারেন যে ফাংশনটি সঠিকভাবে কল হয়েছে, সঠিক আর্গুমেন্ট পেয়েছে, এবং সঠিকভাবে কাজ করেছে। এটি টেস্টিংয়ে বিশেষভাবে সহায়ক, কারণ এটি মূল ফাংশনকে পরিবর্তন না করে কোডের আচরণ পরীক্ষা করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...